﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using BUS;
using DTO;
using QLVBDQ.UIControl;

namespace QLVBDQ
{
    /// <summary>
    /// Interaction logic for LapPhieuNo.xaml
    /// </summary>
    public partial class LapPhieuNo : UserControl
    {
        public LapPhieuNo()
        {
            InitializeComponent();
        }

        private void LapPhieu_Click(object sender, EventArgs e)
        {

        }

        private void Thoat_Click(object sender, EventArgs e)
        {

        }


        private void maKhachHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;
                tienTraNow.Focus();
            }
        }

        private void listPhieu_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            DienThongTinPhieuNo();
        }

        private void LapPhieu_Click(object sender, RoutedEventArgs e)
        {
            LapPhieuNoMoi();
        }

        /// <summary>
        /// Load mã phiếu nợ khi khởi tạo
        /// </summary>
        private void LoadMaPhieu()
        {
            maPhieu.Text = PhieuNo_BUS.Instance.LayMaPhieuNoMax();
            ngayLapphieu.DisplayDate = DateTime.Now;
            ngayLapphieu.SelectedDate = DateTime.Now;
        }

        /// <summary>
        /// Lấy mã khách hàng quen thui
        /// </summary>
        private void KhoiTaoMaKhachHangAuto()
        {
            List<string> list = KhachHang_BUS.Instance.LayToanBoMaKhachHangQuen();
            for (int i = 0; i < list.Count; i++)
                maKhachHang.AddItem(new AutoCompleteEntry(list[i], list[i]));
        }

        /// <summary>
        /// Tự động điền thông tin khách hàng khi biết mã khách hàng
        /// </summary>
        void TuDongDienThongTinKhachHang()
        {
            KhachHang_DTO kh = KhachHang_BUS.Instance.LayThongTinKhachHang(maKhachHang.Text);
            if (kh == null)
            {
                hoTen.Text = string.Empty;
                tongNo.Text = string.Empty;
                tienDaTra.Text = string.Empty;
                conLai.Text = string.Empty;
                ngayNo.DisplayDate = DateTime.Now;
                ngayTraCuoi.DisplayDate = DateTime.Now;
                return;
            }
            hoTen.Text = kh.TenKhachHang;
        }

        /// <summary>
        /// Tự động điền thông tin nợ
        /// </summary>
        void TuDongDienThongTinNo()
        {
            listPhieu.Items.Clear();
            // Load danh sach phiếu bán hàng
            List<PhieuBanHang_DTO> list = PhieuBanHang_BUS.Instance.LayDanhSachPhieuBanHangTraCham(maKhachHang.Text);
            for (int i = 0; i < list.Count; i++)
            {
                list[i].STT = i + 1;
                listPhieu.Items.Add(list[i]);
            }
        }

        /// <summary>
        /// Điền thông tin phiếu nợ
        /// </summary>
        void DienThongTinPhieuNo()
        {
            if (listPhieu.SelectedIndex == -1)
                return;
            // Điền thông tin
            PhieuBanHang_DTO phieuBan = (PhieuBanHang_DTO)listPhieu.SelectedItem;
            tongNo.Text = phieuBan.TongTien.ToString();
            // Lấy và điền thông tin vào số tiền đã trả
            PhieuNo_DTO phieuNoCuoi = PhieuNo_BUS.Instance.LayPhieuNoCuoi(phieuBan.MaPhieuBanHang);
            conLai.Text = phieuNoCuoi.ConLai.ToString();
            tienDaTra.Text = (phieuBan.TongTien - phieuNoCuoi.ConLai).ToString();
            // Set thong tin ngay No
            ngayNo.DisplayDate = phieuBan.NgayBan;
            ngayNo.SelectedDate = phieuBan.NgayBan;

            ngayTraCuoi.DisplayDate = phieuNoCuoi.NgayTra;
            ngayTraCuoi.SelectedDate = phieuNoCuoi.NgayTra;

            maPhieuBan.Text = phieuBan.MaPhieuBanHang;
        }

        private void tienDangNo_TextChanged(object sender, TextChangedEventArgs e)
        {
            try
            {
                long.Parse(conLai.Text);
                long.Parse(tienTraNow.Text);
            }
            catch (Exception)
            {
                tienConLaiNow.Text = "";
                return;
            }

            long lConLai = long.Parse(conLai.Text);
            long lTra = long.Parse(tienTraNow.Text);
            if (lTra > lConLai)
            {
                tienConLaiNow.Text = "";
                return;
            }

            tienConLaiNow.Text = (lConLai - lTra).ToString();
        }

        void LapPhieuNoMoi()
        {
            // Xác nhận
            if (MessageBox.Show("Có chắc bạn muốn lập phiếu!", "Cảnh báo", MessageBoxButton.YesNo) == MessageBoxResult.No)
                return;

            // Kiểm tra điều kiện
            if (hoTen.Text == string.Empty)
            {
                MessageBox.Show("Thông tin khách hàng không hợp lệ");
                return;
            }

            if (maPhieuBan.Text == string.Empty)
            {
                MessageBox.Show("Phiếu bán hàng không hợp lệ");
                return;
            }

            if (tienConLaiNow.Text == string.Empty)
            {
                MessageBox.Show("Số tiền trả không hợp lệ");
                return;
            }

            // Ok
            if (!PhieuNo_BUS.Instance.ThemPhieuNoMoi(new PhieuNo_DTO("---", maPhieuBan.Text, ngayTraCuoi.DisplayDate, ngayLapphieu.DisplayDate, long.Parse(conLai.Text),
                long.Parse(tienTraNow.Text), long.Parse(tienConLaiNow.Text))))
            {
                MessageBox.Show("Có lỗi xảy ra khi Thêm phiếu nợ");
                return;
            }
            MessageBox.Show("Thêm phiếu nợ thành công!");
        }

        private void maKhachHang_LostFocus(object sender, RoutedEventArgs e)
        {
            if (maKhachHang.IsElementFocused())
                return;

            TuDongDienThongTinKhachHang();
            TuDongDienThongTinNo();
        }

        private void UserControl_Loaded_1(object sender, EventArgs e)
        {
            LoadMaPhieu();
            KhoiTaoMaKhachHangAuto();
            maKhachHang.MakeFocus();
        }

    }
}
